<!DOCTYPE html>
<!-- saved from url=(0127)https://docs.google.com/document/d/e/2PACX-1vTPdLaWVHtvE7vXBi6eE9haiPgXZQSU7awrXAjs2eIF83NX24R2AKb08B16pL0Osrkf1t2k6D1OR2i-/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerfWG call - 27 August 2020</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #header {
        align-items: center;
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        height: 60px;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #header #title {
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #header #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #header {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #header #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #header #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="header"><div id="title">WebPerfWG call - 27 August 2020</div><div id="interval"><span></span></div></div><div id="contents"><style type="text/css">ul.lst-kix_dudafqfa01mv-0{list-style-type:none}ul.lst-kix_dudafqfa01mv-1{list-style-type:none}ul.lst-kix_dudafqfa01mv-2{list-style-type:none}.lst-kix_fruud81gjx07-4>li:before{content:"\0025cb  "}.lst-kix_fruud81gjx07-3>li:before{content:"\0025cf  "}.lst-kix_fruud81gjx07-5>li:before{content:"\0025a0  "}.lst-kix_fruud81gjx07-6>li:before{content:"\0025cf  "}ul.lst-kix_dudafqfa01mv-7{list-style-type:none}ul.lst-kix_dudafqfa01mv-8{list-style-type:none}.lst-kix_fruud81gjx07-8>li:before{content:"\0025a0  "}ul.lst-kix_dudafqfa01mv-3{list-style-type:none}.lst-kix_3orktlvfbylz-0>li:before{content:"\0025cf  "}ul.lst-kix_dudafqfa01mv-4{list-style-type:none}.lst-kix_fruud81gjx07-7>li:before{content:"\0025cb  "}ul.lst-kix_dudafqfa01mv-5{list-style-type:none}ul.lst-kix_dudafqfa01mv-6{list-style-type:none}ul.lst-kix_pf20cugbki6x-2{list-style-type:none}ul.lst-kix_pf20cugbki6x-3{list-style-type:none}ul.lst-kix_pf20cugbki6x-0{list-style-type:none}ul.lst-kix_pf20cugbki6x-1{list-style-type:none}ul.lst-kix_pf20cugbki6x-6{list-style-type:none}ul.lst-kix_pf20cugbki6x-7{list-style-type:none}ul.lst-kix_pf20cugbki6x-4{list-style-type:none}ul.lst-kix_pf20cugbki6x-5{list-style-type:none}ul.lst-kix_pf20cugbki6x-8{list-style-type:none}.lst-kix_3orktlvfbylz-8>li:before{content:"\0025a0  "}.lst-kix_3orktlvfbylz-6>li:before{content:"\0025cf  "}.lst-kix_3orktlvfbylz-7>li:before{content:"\0025cb  "}.lst-kix_3orktlvfbylz-1>li:before{content:"\0025cb  "}.lst-kix_3orktlvfbylz-2>li:before{content:"\0025a0  "}.lst-kix_dudafqfa01mv-7>li:before{content:"\0025cb  "}.lst-kix_dudafqfa01mv-8>li:before{content:"\0025a0  "}.lst-kix_dudafqfa01mv-6>li:before{content:"\0025cf  "}.lst-kix_3orktlvfbylz-5>li:before{content:"\0025a0  "}.lst-kix_3orktlvfbylz-3>li:before{content:"\0025cf  "}.lst-kix_3orktlvfbylz-4>li:before{content:"\0025cb  "}.lst-kix_pf20cugbki6x-6>li:before{content:"\0025cf  "}.lst-kix_fruud81gjx07-2>li:before{content:"\0025a0  "}.lst-kix_dudafqfa01mv-0>li:before{content:"\0025cf  "}.lst-kix_pf20cugbki6x-5>li:before{content:"\0025a0  "}.lst-kix_pf20cugbki6x-7>li:before{content:"\0025cb  "}.lst-kix_pf20cugbki6x-4>li:before{content:"\0025cb  "}.lst-kix_pf20cugbki6x-8>li:before{content:"\0025a0  "}.lst-kix_dudafqfa01mv-2>li:before{content:"\0025a0  "}.lst-kix_fruud81gjx07-1>li:before{content:"\0025cb  "}ul.lst-kix_fruud81gjx07-3{list-style-type:none}ul.lst-kix_fruud81gjx07-2{list-style-type:none}.lst-kix_dudafqfa01mv-3>li:before{content:"\0025cf  "}.lst-kix_dudafqfa01mv-4>li:before{content:"\0025cb  "}ul.lst-kix_fruud81gjx07-5{list-style-type:none}ul.lst-kix_fruud81gjx07-4{list-style-type:none}.lst-kix_fruud81gjx07-0>li:before{content:"\0025cf  "}.lst-kix_dudafqfa01mv-5>li:before{content:"\0025a0  "}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}ul.lst-kix_fruud81gjx07-1{list-style-type:none}ul.lst-kix_fruud81gjx07-0{list-style-type:none}ul.lst-kix_3orktlvfbylz-4{list-style-type:none}ul.lst-kix_3orktlvfbylz-3{list-style-type:none}ul.lst-kix_3orktlvfbylz-6{list-style-type:none}ul.lst-kix_3orktlvfbylz-5{list-style-type:none}.lst-kix_pf20cugbki6x-0>li:before{content:"\0025cf  "}ul.lst-kix_3orktlvfbylz-0{list-style-type:none}ul.lst-kix_fruud81gjx07-7{list-style-type:none}ul.lst-kix_fruud81gjx07-6{list-style-type:none}ul.lst-kix_3orktlvfbylz-2{list-style-type:none}ul.lst-kix_3orktlvfbylz-1{list-style-type:none}ul.lst-kix_fruud81gjx07-8{list-style-type:none}.lst-kix_pf20cugbki6x-2>li:before{content:"\0025a0  "}.lst-kix_pf20cugbki6x-1>li:before{content:"\0025cb  "}.lst-kix_pf20cugbki6x-3>li:before{content:"\0025cf  "}ul.lst-kix_3orktlvfbylz-8{list-style-type:none}ul.lst-kix_3orktlvfbylz-7{list-style-type:none}.lst-kix_dudafqfa01mv-1>li:before{content:"\0025cb  "}ol{margin:0;padding:0}table td,table th{padding:0}.c1{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c9{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c7{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c0{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c8{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c10{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c5{color:inherit;text-decoration:inherit}.c6{padding:0;margin:0}.c3{margin-left:36pt;padding-left:0pt}.c2{font-weight:700}.c4{height:11pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c10"><h2 class="c7" id="h.ru3aj8toqfjh"><span class="c9">Participants</span></h2><p class="c0"><span class="c1">Yoav Weiss, Nic Jansma, Philippe Le Hegaret, Alex Christensen, Noam Helfman, Gilles Dubuc, Dominic Farolino, Sean Feng, Neil Craig, Nicol&aacute;s Pe&ntilde;a, Carine Bournez, Andrew Comminos, Michelle Vu, P Perl, Michal Mocny, Annie Sullivan, Steven Bougon, Nate Schloss, Ben De Kosnik, Chris Harrelson, Ryosuke Niwa, Philip Walton</span></p><h2 class="c7" id="h.ru3aj8toqfjh-1"><span class="c9">Next Meeting</span></h2><p class="c0"><span class="c1">September 10th @ 10am PST</span></p><h2 class="c7" id="h.n4a5sbroarjv"><span class="c9">Hackathon</span></h2><ul class="c6 lst-kix_pf20cugbki6x-0 start"><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: We had talked about running 1-2 days of working through issues prior to TPAC</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Timezone wise, it would be better to have several half-days</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Schedule around this time on Tuesdays in September, 3 or 4 half-days</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… I will send out invites, and alert the mailing list so others can attend as well</span></li></ul><h2 class="c7" id="h.x6n5holbxoey"><span class="c9">Incubation CFC</span></h2><ul class="c6 lst-kix_fruud81gjx07-0 start"><li class="c0 c3 li-bullet-0"><span class="c8"><a class="c5" href="https://www.google.com/url?q=https://lists.w3.org/Archives/Public/public-web-perf/2020Aug/0005.html&amp;sa=D&amp;source=editors&amp;ust=1613234105351000&amp;usg=AOvVaw3vWXJI25N1rdjQtZmpV3_s">https://lists.w3.org/Archives/Public/public-web-perf/2020Aug/0005.html</a></span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Send out a mail a few weeks ago to see if there are any incubations that we want to invite into the working group</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… There was some discussion on the thread and would like to bring some of those into this call</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Benjamin, you had brought up some questions and would like to see if you could explain more here.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Benjamin</span><span class="c1"><b></b>: Timing wise, is this related to rechartering?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Somewhat related, I think most would be covered by the existing charter, but some could be included as deliverables</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… We could amend the charter later</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… I think we agree the use-cases those incubations attempt to solve are valuable and are worthwhile to collaborate on</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… They don’t have to be included in this group, but to ensure we’re all comfortable discussing those issues on these calls, which can increase visibility and collaboration</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Benjamin</span><span class="c1"><b></b>: I’m a little uncomfortable because I don’t think there is multi-vendor consensus, and would prefer to keep them in WICG. &nbsp;I don’t see any harm in keeping them out of W3C right now</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… In the future if we get more consensus between vendors that’s a good point to move to the W3C</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Does that apply to all of the incubations, or just some? E.g. isInputPending</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Benjamin</span><span class="c1"><b></b>: Did we reach consensus on the call when discussed?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: I believe so at the time, yes</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: At this time Webkit isn’t interested in implementing these</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: In the past we’ve included some proposals that have lagged in implementation in other vendors. &nbsp;Do you object to these specifications being worked on here?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: If this is going into future rechartering, we don’t want to limit our participation in this working group. &nbsp;My preference is not to have them.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Benjamin from Mozilla’s perspective?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Benjamin</span><span class="c1"><b></b>: We don’t have clear consensus, we don’t have a formal objection. &nbsp;I would repeat my request to delay this.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Philippe</span><span class="c1"><b></b>: What about the users’ perspective?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Steven</span><span class="c1"><b></b>: For Salesforce, we would like to have these APIs available, only one may not be suitable for us</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Do you feel that these incubations should be adopted in the working group? &nbsp;Not what various engines will implement and ship? &nbsp;Whether these should be brought into the working group or stay as incubations for now?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Steven</span><span class="c1"><b></b>: As a user it’s hard for me to say what the difference is.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Gilles</span><span class="c1"><b></b>: What’s the practical difference for us?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: From your perspective, the various issues will be discussed as part of the WG calls and issue triage, as opposed to just in Github issues.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… My hope is having that visibility will get us closer to multi-vendor consensus and implementations, but those are not tightly coupled.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Rysokue</span><span class="c1"><b></b>: I’m sympathetic to some of the use-cases, but my main concern is some of the solutions these cases present</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… The most practical solution difference between them being in the WG or not is if they’re part of the charter and deliverables, which have IP implications.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: The intent with adoption would be to add them as deliverables, so having Apple’s position on that angle would be useful</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Nic</span><span class="c1"><b></b>: Akamai has a broad interest in all of these specifications, and would prefer to be able to discuss these openly in the WG with multiple stakeholders, vendors, and users.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Steven</span><span class="c1"><b></b>: Is the concern that if we brought them in as a deliverable, and Apple wouldn’t be interested in delivering them, is that the concern?</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: I think the concern is more around the IP implications of bringing them into the working group.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: It’s not that we’re not interested in the use cases, just that we would need to do additional research if we were to bring them in</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Philippe</span><span class="c1"><b></b>: I think all of them live within the scope of the working group’s current charter</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: Concern is that in today’s multi-vendor client that one vendor proposes a feature, implements it, and websites start using it right away. &nbsp;The impact of that locks in a solution before there was discussion and consensus.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… We don’t think any of these specifications are good solutions to existing use cases</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: It’s hard to talk about this in the abstract, so if we just talk about ElementTiming and LCP for example, we’ve been talking in this working group about providing measurable visual elements for at least 5 years. &nbsp;The use case is something people are interested in measuring, that we’ve been discussing here for a long while.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: There have been multiple proposals for solving these problems, and I have raised multiple questions and issues about ElementTiming and LCP. &nbsp;So why do we think they’ve been incubated enough and in a good state to be moved into the Working Group.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: We’re not trying to move those to CR or PR. &nbsp;We’re trying to get them adopted as Working Drafts. &nbsp;There’s not necessarily a quality bar here.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… At the same time I understand is that we don’t have consensus</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: Here specifically I’ve raised concerns about all of these implications in the past</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c1"><b></b>: Can you be precise about feedback that was ignored?</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… I would like to clarify what we’ve addressed</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: I don’t feel that any of these APIs are appropriate for any of the use cases</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: My recollection for LCP specifically, it was presented multiple times to the WG, and you and others raised concerns, and Annie presented data to address those concerns.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… From my recollection from that meeting the initial skepticism was addressed.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… If that’s not the case it may be useful to point out again what concerns we have</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: The data was specifically from Chrome, which is how Chrome paints. &nbsp;We do not believe that would work in Safari because our painting model works the same as others.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Also, what’s important during page load is very subjective and what you value for user experience.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… As an implementer, we have an objection to having LCP as a metric, as that might encourage developers to optimize the wrong thing for Safari</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Yes, these are things we should discuss in the working group because we agree on the underlying use case</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… What is the distinction we should make between the things that should be incubated and the things that should be brought into the working group</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Regarding the painting differences between different engines, I was under the impression that we more-or-less defined as part of FCP and maybe ElementTiming and LCP should benefit from similar definitions for all engines.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Otherwise, the question regarding when incubations should be adopted, is not necessarily a well-defined line</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… This was something mostly working-group driven, there is no strict criteria.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… When does this working group think an incubation has been defined well enough that we want to bring it into the working group for discussion</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… This was a call for consensus, and we don’t currently have consensus</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… If there are some incubations in that list which may have more interest than others, such as isInputPending which we verbally agreed to adopt but didn’t send an official CFC.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Benjamin had asked for an extension until TPAC, which we could wait for re-discussion</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Benjamin</span><span class="c1"><b></b>: Something to think about is automating that process, to get a show of hands every 6 months. &nbsp;Might be helpful to get us towards consensus.</span></li></ul><p class="c0 c4"><span class="c1"></span></p><h2 class="c7" id="h.9q1uhzo2mr0x"><span class="c9">Preload =&gt; HTML</span></h2><ul class="c6 lst-kix_3orktlvfbylz-0 start"><li class="c0 c3 li-bullet-0"><span class="c8"><a class="c5" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/154&amp;sa=D&amp;source=editors&amp;ust=1613234105360000&amp;usg=AOvVaw3S_L5N_hcKU8LYk0xojMbK">https://github.com/w3c/preload/issues/154</a></span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Requests to integrate more parts of Preload into the processing model of HTML</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Having Preload defined in HTML but have its own separate spec is confusing</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… One solution for that is to merge all of the existing processing model into HTML, publish a note, and move all Issues to the WHATWG</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Strong opinions?</span></li><li class="c0 c3 li-bullet-0"><span class="c8"><a class="c5" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/147&amp;sa=D&amp;source=editors&amp;ust=1613234105361000&amp;usg=AOvVaw3kqLEyi6oSlhs-URTZMhQ9">https://github.com/w3c/preload/issues/147</a></span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Move the parts related to the processing model into the HTML specification</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Philippe</span><span class="c1"><b></b>: If we move the processing model, we should move the markup as well, and if we do that there’s nothing left</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: Makes sense to me to merge it into HTML, given the rest of the LINK element processing is in there</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Benjamin</span><span class="c1"><b></b>: Agreed</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Philippe</span><span class="c1"><b></b>: Moving from W3C to WHATWG or vice versa, both organizations have to agree</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Bad news is you’re number 4 or 5 on the review list, and meetings have been spotty at best. &nbsp;Might take a month or two before we can get back to you.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: I don’t think any of this is urgent</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Seems like it would reduce confusion</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Philippe</span><span class="c1"><b></b>: I will take an action item to bring this up, but it may not happen before TPAC</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Yes, please</span></li></ul><p class="c0 c4"><span class="c1"></span></p><h2 class="c7" id="h.sh7y8g62lz56"><span class="c9">EventTiming vs. Long Tasks</span></h2><ul class="c6 lst-kix_dudafqfa01mv-0 start"><li class="c0 c3 li-bullet-0"><span class="c8"><a class="c5" href="https://www.google.com/url?q=https://lists.webkit.org/pipermail/webkit-dev/2020-August/031329.html&amp;sa=D&amp;source=editors&amp;ust=1613234105363000&amp;usg=AOvVaw2_JWvO3l1RXoR5JKEI1QE-">https://lists.webkit.org/pipermail/webkit-dev/2020-August/031329.html</a></span></li><li class="c0 c3 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c1"><b></b>: webkit-dev thread about Event Timing</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Wanted to clarify use-cases and differences between Long Tasks and Event Timing</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… In particular, there was some concern about Long Tasks that it’s already adopted, that maybe Event Timing solves similar use cases.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Alex</span><span>:</span><span class="c2">&nbsp;</span><span class="c1">webkit-dev thread asked if there was overlap</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c1"><b></b>: For Long Tasks, one use case is detecting if a website can respond to user-input quickly. &nbsp;There are other use cases, such as to ensure that animations that run on the main thread run smoothly, because if you have Long Tasks that might not be possible. &nbsp;Another is that CPU usage can be linked to consumption, as you can look at Long Tasks to try to keep the battery usage as low as possible.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… You can also compute various metrics based on the Long Tasks, such as Sum of Long Tasks to help link to CPU time, or to compute metrics like Total Blocking Time which measures how much of time on the site is user-perceivable.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… There are some other use cases for example some ads teams use Long Tasks to compute metrics on the impact of ads on websites.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Overall some analytics providers use them to try to fix performance bottlenecks.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Noam</span><span class="c1"><b></b>: We use them generally the way you describe it as Total Blocking Time (TBT) to grade sessions’ user experience, then use other session telemetry to analyze where the bottlenecks are and where to improve our code. &nbsp;Very useful to us for our use case.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Steven</span><span class="c1"><b></b>: We also use Sum of Long Tasks to understand if the slowness is due to the underlying hardware or the backend.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c1"><b></b>: We can compare that to Event Timing. &nbsp;Notice not all of Long Tasks are related to events. &nbsp;Event Timing tries to capture timing of events that actually happen. &nbsp;It’s hard to predict when a user-input is going to happen. &nbsp;So you can’t use Long Tasks to measure input delay, the time when the user actually clicks is hard to predict.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Event Timing solves use cases related to directly measuring delays in responding to user inputs. &nbsp;One of the metrics Event Timing allows is measuring First Input Delay, which we’ve defined previously in these calls: for the first meaningful user interaction on the page, how long does it take for the user-agent to start handling the event. &nbsp;I.e. for a click or a tap, how long does the UA take to dispatch the pointer-down related to that interaction.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Does not measure how long it takes for the UA to actually handle it, but just dispatch the event. &nbsp;But it does allow you to also measure how long it takes event handlers to run. &nbsp;(Any async tasks posted during the handler are not measured yet by the API)</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… The final component it measures is how long it takes the UA to update the screen based on the interaction. &nbsp;Assuming the screen is updated from the user interaction. &nbsp;Exposes the time it takes for the next paint from the user interactions.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Michal</span><span class="c1"><b></b>: Long Tasks seems to be good at predicting issues, battery usage. &nbsp;For smoothness etc it’s a predictor. &nbsp;For Event Timing it results in the actual data bound to the event itself.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: Issue here isn’t the use cases, that there’s so many APIs and how do they all fit together?</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… For Event Timing, one of the cases is measuring how long the UA takes to resolve. &nbsp;But in today’s modern apps, we have a lot of async/promises/etc. &nbsp;Need many APIs combined to see how long the user input took to get to the screen again.</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c1"><b></b>: Proposal is to address that use case with Event Timing, but we’re not there yet. &nbsp;It’s hard to measure causality. That’s a problem we’re hoping to address at some point. &nbsp;We think this is a good first step towards that problem.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Frame Timing is more geared towards smoothness of animations and scrolling, different than measuring how long tapping takes to produce a response</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: In the scenario you propose, it’s hard to measure the full async nature of it. &nbsp;But we’re creating the building blocks for developers to help bridge the gap of asynchronous calls if that is of value as well.</span></li><li class="c0 c3 li-bullet-0"><span class="c1">… Ideally we would have a high-level API, but a set of low-level APIs that are building blocks doesn’t sound like a bad outcome</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Ryosuke</span><span class="c1"><b></b>: Not sure if these are the right primitives</span></li><li class="c0 c3 li-bullet-0"><span class="c2">Yoav</span><span class="c1"><b></b>: Are there alternatives that you would consider a good API that would solve these issues? &nbsp;As Nicol&aacute;s says this API could be grown into that.</span></li><li class="c0 c3 li-bullet-0"><span>… Let’s continue this discussion next time</span></li></ul></div></div><div id="footer"><span>Published by <a target="_blank" title="Learn more about Google Drive" href="https://docs.google.com/">Google Drive</a></span><span class="dash">–</span><a href="https://docs.google.com/u/0/abuse?id=AKkXjoyhF0ePvKMM7jclTTM03X_nsbPnFOSw0lT8U8RIW_ei1AqJbLV8EXQqDz67j9gFcd6-WD5KzLzOofkUmIg:0">Report Abuse</a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function da(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}var ea="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},fa;
if("function"==typeof Object.setPrototypeOf)fa=Object.setPrototypeOf;else{var ha;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;ha=ja.a;break a}catch(a){}ha=!1}fa=ha?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=fa;
function h(a,b){a.prototype=ea(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.o=b.prototype}da("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var l=this||self;function la(){}function ma(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function na(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function oa(a,b){function c(){}c.prototype=b.prototype;a.o=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.B=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}}function pa(a){return a};var qa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function ra(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var m;function p(a,b){this.i=a===sa&&b||"";this.j=ta}p.prototype.h=!0;p.prototype.g=function(){return this.i};var ta={},sa={};var ua=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]},va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,Ba=/[\x00&<>"']/;function Ca(a,b){return a<b?-1:a>b?1:0};function q(a,b){this.i=b===r?a:""}q.prototype.h=!0;q.prototype.g=function(){return this.i.toString()};q.prototype.toString=function(){return this.i.toString()};function u(a){return a instanceof q&&a.constructor===q?a.i:"type_error:SafeUrl"}
var Da=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Ea=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Fa=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Ga(a){if(a instanceof q)return a;a="object"==typeof a&&a.h?a.g():String(a);Fa.test(a)||(a="about:invalid#zClosurez");return new q(a,r)}
var r={},Ha=new q("about:invalid#zClosurez",r);var v;a:{var Ia=l.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){v=Ja;break a}}v=""}function w(a){return-1!=v.indexOf(a)};function x(a,b,c){this.i=c===Ka?a:""}x.prototype.h=!0;x.prototype.g=function(){return this.i.toString()};x.prototype.toString=function(){return this.i.toString()};var Ka={};function La(a,b,c,d){a=a instanceof q?a:Ga(a);b=b||l;c=c instanceof p?c instanceof p&&c.constructor===p&&c.j===ta?c.i:"type_error:Const":c||"";return void 0!==d?b.open(u(a),c,d,void 0):b.open(u(a),c)};function Ma(a){Ma[" "](a);return a}Ma[" "]=la;function y(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};var Na=w("Opera"),z=w("Trident")||w("MSIE"),Oa=w("Edge"),Pa=Oa||z,Qa=w("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"))&&!(w("Trident")||w("MSIE"))&&!w("Edge"),Ra=-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"),Sa=w("Macintosh");function Ta(){var a=l.document;return a?a.documentMode:void 0}var Ua;
a:{var Va="",Wa=function(){var a=v;if(Qa)return/rv:([^\);]+)(\)|;)/.exec(a);if(Oa)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ra)return/WebKit\/(\S+)/.exec(a);if(Na)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Wa&&(Va=Wa?Wa[1]:"");if(z){var Xa=Ta();if(null!=Xa&&Xa>parseFloat(Va)){Ua=String(Xa);break a}}Ua=Va}var Ya=Ua,Za={},$a;if(l.document&&z){var ab=Ta();$a=ab?ab:parseInt(Ya,10)||void 0}else $a=void 0;var bb=$a;function cb(a){return y(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++db}}})}var db=1E3;function A(){}A.prototype.u=function(){return this.j||(Object.defineProperties(this,{j:{value:++eb,enumerable:!1}}),this.j)};A.prototype.toString=function(){var a=B(fb(gb(this.constructor)))+"@";var b=(this.u()>>>0).toString(16);return a+B(b)};function D(){}h(D,A);D.prototype.i=function(a){this.h=a;if(a instanceof Object)try{a.A=this}catch(b){}};function hb(a){a.h instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.h):a.h.stack=Error().stack)}D.prototype.toString=function(){var a=fb(gb(this.constructor)),b=this.l;return null==b?a:B(a)+": "+B(b)};function ib(){}h(ib,D);function jb(){}h(jb,ib);var eb=0;function E(){}h(E,jb);E.prototype.i=function(a){jb.prototype.i.call(this,Object.is(this.g,"__noinit__")?a:this.g)};function kb(){}h(kb,E);function lb(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(a){return null==a?"null":a.toString()}function mb(a){return 65536<=a?B(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+B(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function nb(a,b){var c=b,d=a.length,e;b=lb(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=lb(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function ob(a,b){this.h=a;this.g=b}h(ob,A);function fb(a){var b=cb(a.h);0!=a.g&&(b="L"+B(b)+";");a=a.g;for(var c="",d=0;d<a;d=d+1|0)c=B(c)+"[";return B(c)+B(b)}ob.prototype.toString=function(){return"class "+B(fb(this))};function gb(a){var b=0;return y(a.prototype,"$$class/"+b,function(){return new ob(a,b)})};function pb(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var qb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function rb(a){a=qb.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function sb(a,b){var c=a.indexOf(mb(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=nb(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=nb(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(mb(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=B(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+B(c.substr(e))):
(d=B(c.substr(0,b|0)),e=b=b+1|0,c=d+B(c.substr(e)));a=a.replace(/\+/g,c);return pb(a,!1)};function F(a,b){this.h=b;for(var c=[],d=!0,e=a.length-1;0<=e;e--){var f=a[e]|0;d&&f==b||(c[e]=f,d=!1)}this.g=c}var tb={};function ub(a){return-128<=a&&128>a?y(tb,a,function(b){return new F([b|0],0>b?-1:0)}):new F([a|0],0>a?-1:0)}function G(a){if(isNaN(a)||!isFinite(a))return H;if(0>a)return I(G(-a));for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=4294967296;return new F(b,0)}var H=ub(0),J=ub(1),vb=ub(16777216);
function K(a){if(-1==a.h)return-K(I(a));for(var b=0,c=1,d=0;d<a.g.length;d++){var e=L(a,d);b+=(0<=e?e:4294967296+e)*c;c*=4294967296}return b}F.prototype.toString=function(a){a=a||10;if(2>a||36<a)throw Error("radix out of range: "+a);if(M(this))return"0";if(-1==this.h)return"-"+I(this).toString(a);for(var b=G(Math.pow(a,6)),c=this,d="";;){var e=wb(c,b).g;c=N(c,O(e,b));var f=((0<c.g.length?c.g[0]:c.h)>>>0).toString(a);c=e;if(M(c))return f+d;for(;6>f.length;)f="0"+f;d=f+d}};
function L(a,b){return 0>b?0:b<a.g.length?a.g[b]:a.h}function M(a){if(0!=a.h)return!1;for(var b=0;b<a.g.length;b++)if(0!=a.g[b])return!1;return!0}function P(a,b){a=N(a,b);return-1==a.h?-1:M(a)?0:1}function I(a){for(var b=a.g.length,c=[],d=0;d<b;d++)c[d]=~a.g[d];return(new F(c,~a.h)).add(J)}F.prototype.abs=function(){return-1==this.h?I(this):this};
F.prototype.add=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0,e=0;e<=b;e++){var f=d+(L(this,e)&65535)+(L(a,e)&65535),g=(f>>>16)+(L(this,e)>>>16)+(L(a,e)>>>16);d=g>>>16;f&=65535;g&=65535;c[e]=g<<16|f}return new F(c,c[c.length-1]&-2147483648?-1:0)};function N(a,b){return a.add(I(b))}
function O(a,b){if(M(a)||M(b))return H;if(-1==a.h)return-1==b.h?O(I(a),I(b)):I(O(I(a),b));if(-1==b.h)return I(O(a,I(b)));if(0>P(a,vb)&&0>P(b,vb))return G(K(a)*K(b));for(var c=a.g.length+b.g.length,d=[],e=0;e<2*c;e++)d[e]=0;for(e=0;e<a.g.length;e++)for(var f=0;f<b.g.length;f++){var g=L(a,e)>>>16,k=L(a,e)&65535,t=L(b,f)>>>16,n=L(b,f)&65535;d[2*e+2*f]+=k*n;Q(d,2*e+2*f);d[2*e+2*f+1]+=g*n;Q(d,2*e+2*f+1);d[2*e+2*f+1]+=k*t;Q(d,2*e+2*f+1);d[2*e+2*f+2]+=g*t;Q(d,2*e+2*f+2)}for(e=0;e<c;e++)d[e]=d[2*e+1]<<16|
d[2*e];for(e=c;e<2*c;e++)d[e]=0;return new F(d,0)}function Q(a,b){for(;(a[b]&65535)!=a[b];)a[b+1]+=a[b]>>>16,a[b]&=65535,b++}function S(a,b){this.g=a;this.h=b}
function wb(a,b){if(M(b))throw Error("division by zero");if(M(a))return new S(H,H);if(-1==a.h)return b=wb(I(a),b),new S(I(b.g),I(b.h));if(-1==b.h)return b=wb(a,I(b)),new S(I(b.g),b.h);if(30<a.g.length){if(-1==a.h||-1==b.h)throw Error("slowDivide_ only works with positive integers.");for(var c=J,d=b;0>=P(d,a);)c=xb(c,1),d=xb(d,1);var e=T(c,1),f=T(d,1);d=T(d,2);for(c=T(c,2);!M(d);){var g=f.add(d);0>=P(g,a)&&(e=e.add(c),f=g);d=T(d,1);c=T(c,1)}b=N(a,O(e,b));return new S(e,b)}for(e=H;0<=P(a,b);){c=Math.max(1,
Math.floor(K(a)/K(b)));d=Math.ceil(Math.log(c)/Math.LN2);d=48>=d?1:Math.pow(2,d-48);f=G(c);for(g=O(f,b);-1==g.h||0<P(g,a);)c-=d,f=G(c),g=O(f,b);M(f)&&(f=J);e=e.add(f);a=N(a,g)}return new S(e,a)}F.prototype.and=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)&L(a,d);return new F(c,this.h&a.h)};F.prototype.or=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)|L(a,d);return new F(c,this.h|a.h)};
F.prototype.xor=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)^L(a,d);return new F(c,this.h^a.h)};function xb(a,b){var c=b>>5;b%=32;for(var d=a.g.length+c+(0<b?1:0),e=[],f=0;f<d;f++)e[f]=0<b?L(a,f-c)<<b|L(a,f-c-1)>>>32-b:L(a,f-c);return new F(e,a.h)}function T(a,b){var c=b>>5;b%=32;for(var d=a.g.length-c,e=[],f=0;f<d;f++)e[f]=0<b?L(a,f+c)>>>b|L(a,f+c+1)<<32-b:L(a,f+c);return new F(e,a.h)};N(xb(J,32),J);N(xb(J,128),J);function yb(a){a&&"function"==typeof a.v&&a.v()};function U(){this.h=this.h;this.g=this.g}U.prototype.h=!1;U.prototype.v=function(){this.h||(this.h=!0,this.j())};U.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var zb=!z||9<=Number(bb),Ab=!z||9<=Number(bb),Bb=z&&!y(Za,"9",function(){for(var a=0,b=ua(String(Ya)).split("."),c=ua("9").split("."),d=Math.max(b.length,c.length),e=0;0==a&&e<d;e++){var f=b[e]||"",g=c[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;a=Ca(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Ca(0==f[2].length,0==g[2].length)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(0==a)}return 0<=a}),
Cb=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{l.addEventListener("test",la,b),l.removeEventListener("test",la,b)}catch(c){}return a}();function Db(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=!1}Db.prototype.h=function(){this.defaultPrevented=!0};function V(a,b){Db.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Qa){a:{try{Ma(b.nodeName);var e=!0;break a}catch(f){}e=
!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=
a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:Eb[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&V.o.h.call(this)}}oa(V,Db);var Fb=[1,4,2],Eb={2:"touch",3:"pen",4:"mouse"};V.prototype.h=function(){V.o.h.call(this);var a=this.i;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Bb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var Gb="closure_listenable_"+(1E6*Math.random()|0);var Hb=0;function Ib(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.h=e;this.key=++Hb;this.m=this.s=!1}function Jb(a){a.m=!0;a.listener=null;a.g=null;a.src=null;a.h=null};function Kb(a){this.src=a;this.g={};this.h=0}Kb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var k=a[g];if(!k.m&&k.listener==b&&k.capture==!!d&&k.h==e)break a}g=-1}-1<g?(b=a[g],c||(b.s=!1)):(b=new Ib(b,this.src,f,!!d,e),b.s=c,a.push(b));return b};function Lb(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=qa(d,b),f;(f=0<=e)&&Array.prototype.splice.call(d,e,1);f&&(Jb(b),0==a.g[c].length&&(delete a.g[c],a.h--))}};var Mb="closure_lm_"+(1E6*Math.random()|0),Nb={},Ob=0;function Pb(a,b,c,d,e){if(d&&d.once)return Qb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)Pb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!1,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!1,d,e)}
function Sb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=ma(e)?!!e.capture:!!e,k=Tb(a);k||(a[Mb]=k=new Kb(a));c=k.add(b,c,d,g,f);if(c.g)return c;d=Ub();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)Cb||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Vb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");Ob++;return c}
function Ub(){var a=Wb,b=Ab?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function Qb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)Qb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!0,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!0,d,e)}
function Xb(a){if("number"!==typeof a&&a&&!a.m){var b=a.src;if(b&&b[Gb])Lb(b.g,a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Vb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);Ob--;(c=Tb(b))?(Lb(c,a),0==c.h&&(c.src=null,b[Mb]=null)):Jb(a)}}}function Vb(a){return a in Nb?Nb[a]:Nb[a]="on"+a}
function Yb(a,b,c,d){var e=!0;if(a=Tb(a))if(b=a.g[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.m&&(f=Zb(f,d),e=e&&!1!==f)}return e}function Zb(a,b){var c=a.listener,d=a.h||a.src;a.s&&Xb(a);return c.call(d,b)}
function Wb(a,b){if(a.m)return!0;if(!Ab){if(!b)a:{b=["window","event"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new V(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.g;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.g=d[e];var f=Yb(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.g=d[e],f=Yb(d[e],a,!1,b),c=c&&f}return c}return Zb(a,
new V(b,this))}function Tb(a){a=a[Mb];return a instanceof Kb?a:null}var $b="__closure_events_fn_"+(1E9*Math.random()>>>0);function Rb(a){if("function"===typeof a)return a;a[$b]||(a[$b]=function(b){return a.handleEvent(b)});return a[$b]};function W(a){U.call(this);this.l=a;this.i={}}oa(W,U);var ac=[];function bc(a){ra(a.i,function(b,c){this.i.hasOwnProperty(c)&&Xb(b)},a);a.i={}}W.prototype.j=function(){W.o.j.call(this);bc(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function cc(a){U.call(this);this.i=a||document.body;this.l=new W(this);a=na(yb,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;var b=this.i,c=this.u,d="click";Array.isArray(d)||(d&&(ac[0]=d.toString()),d=ac);for(var e=0;e<d.length;e++){var f=Pb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}h(cc,U);
cc.prototype.u=function(a){if(!(!(zb?0==a.i.button:"click"==a.type||a.i.button&Fb[0])||Sa&&a.ctrlKey||a.defaultPrevented))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=c;try{var e=rb(c)[3];var f;if(f="www.google.com"===pb(e,!0)){var g=rb(c)[5];f="/url"===pb(g,!0)}if(f){var k=sb(c,"q");d=k?k:sb(c,"url")}}catch(C){a:{var t=C;if(null!=t){var n=t.A;if(null!=n){C=n;break a}}if(t instanceof
TypeError){var R=n=new kb;R.l=B(t);hb(R);n.g="__noinit__";n.g=t;n.i(new TypeError(n));t=n}else R=n=new E,R.l=B(t),hb(R),n.g="__noinit__",n.g=t,n.i(Error(n)),t=n;C=t}if(!(C instanceof ib))throw C.h;}d=null!=d?d:"";if(c!=d){e=void 0;b={target:"_blank",noreferrer:!0};c=window;d instanceof q?f=d:(f="undefined"!=typeof d.href?d.href:String(d),f instanceof q||(f="object"==typeof f&&f.h?f.g():String(f),Fa.test(f)?f=new q(f,r):(f=String(f),f=f.replace(/(%0A|%0D)/g,""),f=(g=f.match(Ea))&&Da.test(g[1])?new q(f,
r):null)),f=f||Ha);d=b.target||d.target;g=[];for(e in b)switch(e){case "width":case "height":case "top":case "left":g.push(e+"="+b[e]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(e+"="+(b[e]?1:0))}e=g.join(",");if((w("iPhone")&&!w("iPod")&&!w("iPad")||w("iPad")||w("iPod"))&&c.navigator&&c.navigator.standalone&&d&&"_self"!=d)e="A",g=document,e=String(e),"application/xhtml+xml"===g.contentType&&(e=e.toLowerCase()),g=e=g.createElement(e),f=f instanceof q?f:Ga(f),g.href=
u(f),e.setAttribute("target",d),b.noreferrer&&e.setAttribute("rel","noreferrer"),b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,c,1),e.dispatchEvent(b);else if(b.noreferrer){if(c=La("",c,d,e),b=u(f),c){Pa&&-1!=b.indexOf(";")&&(b="'"+b.replace(/'/g,"%27")+"'");c.opener=null;Ba.test(b)&&(-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;")),-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;")),-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;")),-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;")),-1!=b.indexOf("'")&&
(b=b.replace(za,"&#39;")),-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;")));b='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+b+'">';if(void 0===m)if(d=null,(e=l.trustedTypes)&&e.createPolicy){try{d=e.createPolicy("goog#html",{createHTML:pa,createScript:pa,createScriptURL:pa})}catch(C){l.console&&l.console.error(C.message)}m=d}else m=d;b=(d=m)?d.createHTML(b):b;b=new x(b,null,Ka);(c=c.document)&&c.write&&(c.write(b instanceof x&&b.constructor===x?b.i:"type_error:SafeHtml"),
c.close())}}else(c=La(f,c,d,e))&&b.noopener&&(c.opener=null);a.h();break}}b=b.parentNode}};function dc(a){new cc(a)}var X=["DOCS_installLinkReferrerSanitizer"],Y=l;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===dc?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=dc;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer();</script></body></html>